﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IceCS.Helpers
{
    public class MathHelper
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public long GetSumFrom1To(long num)
        {
            //return GetSumFrom1ToV1(num);
            return GetSumFrom1ToV2(num);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public long GetSumFrom1ToV1(long num)
        {
            var sum = 0;
            for (int i = 1; i <= num; i++)
            {
                sum += i;
            }
            return sum;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public long GetSumFrom1ToV2(long num)
        {
            //n*(n+1)/2
            return num * (num + 1) / 2;
        }

        public void OddNumber()
        {
            for (int i = 1; i <= 10; i++)
            {
                if (i % 2 == 0)
                    continue;
                Console.Write(" " + i);
            }
        }
        public void EvenNumber()
        {
            for (int i = 1; i <= 10; i++)
            {
                if (i % 2 == 0)
                    Console.Write(" " + i);
            }
        }


        /// <summary>
        /// 判断val值是不是素数
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        static bool IsPrime(int val)
        {
            /*附加信息
             *     质数（prime number）又称素数，有无限个。一个大于1的自然数，除了1和它本身外，
             * 不能被其他自然数（质数）整除，换句话说就是该数除了1和它本身以外不再有其他的因数；
             * 否则称为合数。
             *     根据算术基本定理，每一个比1大的整数，要么本身是一个质数，要么可以写成一系列
             *质数的乘积；而且如果不考虑这些质数在乘积中的顺序，那么写出来的形式是唯一的。最小
             *的质数是2。目前为止，人们未找到一个公式可求出所有质数。
             */
            if (val < 2) return false;
            if (val == 2) return true;
            for (int i = 2; i <= Math.Sqrt(val); i++)
            {
                if ((val % i) == 0) return false;
            }
            return true;
        }

        int MaxValue(int[] intArray, out int maxIndex)
        {
            int maxVal = intArray[0];
            maxIndex = 0;
            for (int i = 1; i < intArray.Length; i++)
            {
                if (intArray[i] > maxVal)
                {
                    maxVal = intArray[i];
                    maxIndex = i;
                }
            }
            return maxVal;
        }

        //个=num%10;
        //十=(num%100)/10;
        //百=(num/100)%10;
        //千=(num/1000)%10;
        //万= (num%100000000)/10000;
        //亿= num/100000000;


    }
}
